package com.beluga.core.util;

import com.google.common.collect.Lists;
import org.springframework.beans.BeanUtils;

import java.util.Collection;
import java.util.List;

/**
 * dto与do转换工具
 * @author iron.guo
 */
public class BelugaBeanUtils {

    /**
     * dto 转换为Do 工具类
     */
    public static <Do> Do dtoToDo(Object dtoEntity, Class<Do> doClass) {
        // 判断dto是否为空!
        if (dtoEntity == null) {
            return null;
        }
        // 判断DoClass 是否为空
        if (doClass == null) {
            return null;
        }
        try {
            Do newInstance = doClass.newInstance();
            BeanUtils.copyProperties(dtoEntity, newInstance);
            // Dto转换Do
            return newInstance;
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * do 转换为Dto 工具类
     */
    public static <Dto> Dto doToDto(Object doEntity, Class<Dto> dtoClass) {
        // 判断dto是否为空!
        if (doEntity == null) {
            return null;
        }
        // 判断DoClass 是否为空
        if (dtoClass == null) {
            return null;
        }
        try {
            Dto newInstance = dtoClass.newInstance();
            BeanUtils.copyProperties(doEntity, newInstance);
            // Dto转换Do
            return newInstance;
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 将一个List<T>转换为另一个List<T>
     * @param source 原始对象集合
     * @param dtoClass 需要转换成的集合对象
     * @param <Dto>
     * @return
     */
    public static <Dto> Collection<Dto> copyCollection(Object source,Class<Dto> dtoClass) {
        if (source == null) {
            return null;
        }
        List<?> objects= (List<?>) source;
        List<Dto> result= Lists.newArrayList();
        objects.forEach(item->{
            try {
                Dto newInstance =dtoClass.newInstance();
                BeanUtils.copyProperties(item, newInstance);
                result.add(newInstance);
            } catch (Exception e) {
            }
        });
        return result;
    }



}